package com.saber.king.mapper;

import com.saber.king.entity.Company;
import com.saber.king.entity.CompanyExample;
import com.saber.king.entity.SysUser;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 公司相关数据访问层接口
 *
 * @author Saber污妖王
 */
public interface CompanyMapper {
    /**
     * 根据给定参数查询总条数
     *
     * @param example 参数实体
     * @return 总条数
     */
    long countByExample(CompanyExample example);

    /**
     * 根据给定参数删除对应公司
     *
     * @param example 参数实体
     * @return 删除的行数
     */
    int deleteByExample(CompanyExample example);

    /**
     * 根据ID删除对应公司
     *
     * @param id 公司ID
     * @return 删除的行数
     */
    @Delete({
            "delete from t_company",
            "where id = #{id,jdbcType=VARCHAR}"
    })
    int deleteByPrimaryKey(String id);

    /**
     * 插入公司，这里是插入所有字段
     *
     * @param record 公司实体
     * @return 插入的行数
     */
    @Insert({
            "insert into t_company (id, company_name, ",
            "license_key, `type`, ",
            "web_url, representative, ",
            "address, phone, ",
            "email, create_id, ",
            "update_id, create_time, ",
            "update_time, remark, ",
            "deleted)",
            "values (#{id,jdbcType=VARCHAR}, #{companyName,jdbcType=VARCHAR}, ",
            "#{licenseKey,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, ",
            "#{webUrl,jdbcType=VARCHAR}, #{representative,jdbcType=VARCHAR}, ",
            "#{address,jdbcType=VARCHAR}, #{phone,jdbcType=VARCHAR}, ",
            "#{email,jdbcType=VARCHAR}, #{createId,jdbcType=VARCHAR}, ",
            "#{updateId,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, ",
            "#{updateTime,jdbcType=TIMESTAMP}, #{remark,jdbcType=VARCHAR}, ",
            "#{deleted,jdbcType=TINYINT})"
    })
    int insert(Company record);

    /**
     * 插入公司，这里是插入不为空的所有字段
     *
     * @param record 公司实体
     * @return 插入的行数
     */
    int insertSelective(Company record);

    /**
     * 根据给定参数查询对应公司
     *
     * @param example 参数实体
     * @return 查询出的结果集
     */
    List<Company> selectByExample(CompanyExample example);

    /**
     * 根据公司ID删除对应公司
     *
     * @param id 公司ID
     * @return 查询到的公司
     */
    @Select({
            "select",
            "id, company_name, license_key, `type`, web_url, representative, address, phone, ",
            "email, create_id, update_id, create_time, update_time, remark, deleted",
            "from t_company",
            "where id = #{id,jdbcType=VARCHAR}"
    })
    @ResultMap("com.saber.king.mapper.CompanyMapper.BaseResultMap")
    Company selectByPrimaryKey(String id);

    /**
     * 根据给定参数更改对应公司，这里是更改不为空的字段
     *
     * @param record  公司实体
     * @param example 参数实体
     * @return 更改的行数
     */
    int updateByExampleSelective(@Param("record") Company record, @Param("example") CompanyExample example);

    /**
     * 根据给定参数更改对应公司，这里是更改所有字段
     *
     * @param record  公司实体
     * @param example 参数实体
     * @return 更改的行数
     */
    int updateByExample(@Param("record") Company record, @Param("example") CompanyExample example);

    /**
     * 根据公司ID更改对应公司，这里是更改不为空的字段
     *
     * @param record 公司实体
     * @return 更改的行数
     */
    int updateByPrimaryKeySelective(Company record);

    /**
     * 根据公司ID更改对应公司，这里是更改所有字段
     *
     * @param record 公司实体
     * @return 更改的行数
     */
    @Update({
            "update t_company",
            "set company_name = #{companyName,jdbcType=VARCHAR},",
            "license_key = #{licenseKey,jdbcType=VARCHAR},",
            "`type` = #{type,jdbcType=VARCHAR},",
            "web_url = #{webUrl,jdbcType=VARCHAR},",
            "representative = #{representative,jdbcType=VARCHAR},",
            "address = #{address,jdbcType=VARCHAR},",
            "phone = #{phone,jdbcType=VARCHAR},",
            "email = #{email,jdbcType=VARCHAR},",
            "create_id = #{createId,jdbcType=VARCHAR},",
            "update_id = #{updateId,jdbcType=VARCHAR},",
            "create_time = #{createTime,jdbcType=TIMESTAMP},",
            "update_time = #{updateTime,jdbcType=TIMESTAMP},",
            "remark = #{remark,jdbcType=VARCHAR},",
            "deleted = #{deleted,jdbcType=TINYINT}",
            "where id = #{id,jdbcType=VARCHAR}"
    })
    int updateByPrimaryKey(Company record);

    /**
     * 批量/删除公司
     *
     * @param company 操作删除的公司信息
     * @param ids     ID集合
     * @return 删除的行数
     */
    int deletedCompanies(@Param("company") Company company, @Param("ids") List<String> ids);
}